package main

import (
	"fmt"
	"math/rand"
)

// 打印九九乘法表
func multiplyTable() {
	for i := 1; i < 10; i++ {
		for j := 1; j < i+1; j++ {
			if j == 1 {
				// 第一列左对齐两格
				fmt.Printf("%v*%v=%-2v ", j, i, i*j)
			}
			// 其他列左对齐三格
			fmt.Printf("%v*%v=%-3v ", j, i, i*j) // 输出九九乘法表
		}
		fmt.Println()
	}
}

// 求斐波那契
func fibonacci(n int) int {
	if n < 2 {
		return n
	}
	return fibonacci(n-1) + fibonacci(n-2)
}

func main() {
	// 作业
	// 九九乘法表
	multiplyTable()

	// 随机生成20以内的20个非0正整数，打印出来。对生成的数值，第单数个（不是索引）累加求和，第偶数个累乘求积。打印结果
	var sum int16
	var ji int64 = 1

	for i := 1; i < 21; i++ {
		num := rand.Intn(20) + 1 // Intn(20)是[0, 20), +1之后就是[1,21)
		if i&1 == 1 {
			sum += int16(num)
		} else {
			ji *= int64(num)
		}
	}
	fmt.Printf("%v,%v\n", sum, ji)

	// 100以内斐波那契
	i := 0
	for {
		num := fibonacci(i)
		if num < 100 {
			fmt.Println(num)
			i++
		} else {
			break
		}

	}
}

// 阿飞老师的批改
// 1. 循环条件没有正确结束或者说两个分支条件都执行了，导致结果输出异常，如下所示：
// 1*1=1  1*1=1
// 1*2=2  1*2=2   2*2=4
// 1*3=3  1*3=3   2*3=6   3*3=9
// 1*4=4  1*4=4   2*4=8   3*4=12  4*4=16
// 1*5=5  1*5=5   2*5=10  3*5=15  4*5=20  5*5=25
// 1*6=6  1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36
// 1*7=7  1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49
// 1*8=8  1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64
// 1*9=9  1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81
// 2. 随机数模块rand没有使用随机数种子初始化
